<?php 
class Upload{
	public $error;
	private $type;
	private $size;
	public function up(){
		//1.重组数组，为了以后更好循环操作
		$arr = $this->resetArray();
		//2.筛选
		foreach ($arr as $v) {
			if(!$this->filter($v)){
				return array();//和return false 效果一样都是假
			}
		}
		
		//3.上传  为了路径能够使用 返回值为数组，只要数组不为空就等于true
		$destArr = array();
		foreach ($arr as $v) {
			//上传完成后move方法返回文件路径，用空数组接收
			$destArr[]=$this->move($v);
		}
		return $destArr;
		
	}
	
	//构造方法，可以传入参数，也可以使用默认参数
	public function __construct($size=NULL,$type=NULL){
		$this->size = is_null($size)?2*1024*1024:$size;
		$this->type = is_null($type)?array('jpg','png','gif','jpeg'):$type;
	}
	
	//数组重组方法
	private function resetArray(){
		$arr = array();
		$v = current($_FILES);
		if(is_array($v['name'])){//判断是否单文件上传
			foreach ($v['name'] as $key => $value) {
				$arr[] = array(
					'name'=>$v['name'][$key],
					'type'=>$v['type'][$key],
					'tmp_name'=>$v['tmp_name'][$key],
					'error'=>$v['error'][$key],
					'size'=>$v['size'][$key]
				);
			}
		}else{
			$arr[]=$v;
		}
		return $arr;
	}
	
	//筛选方法
	private function filter($v){
		//上传文件的后缀名
		$type = ltrim(strrchr($v['name'], '.'),'.');
		switch (true) {
			//1.判断文件是否上传
			case $v['error']==4:
				$this->error = '没有文件上传';
				return false;
			//2.是否是合法的上传文件
			case !is_uploaded_file($v['tmp_name']):
				$this->error = '上传的文件不合法';
				return false;
			//3.判断大小是否允许
			case $v['size'] > $this->size:
				$this->error = '文件超过配置大小';
				return false;
			//4.类型是否允许
			case !in_array($type, $this->type):
				$this->error = '上传文件类型错误'; 
			//5.判断文件上传错误信息
			case $v['error']==1:
				$this->error = '文件超过配置大小';
				return false;
			case $v['error']==2:
				$this->error = '文件超过配置大小';
				return false;
			case $v['error']==3:
				$this->error = '文件只有部分被上传';
				return false;
			default:
				return true;
		}				
	}
	
	//上传方法
	private function move($v){
		//1.获得路径
		$path = './upLoad';
		is_dir($path)||mkdir($path,0777,true);
		//2.文件名
		$type = ltrim(strrchr($v['name'], '.'),'.');//文件后缀名
		$fileName = time() . mt_rand(0, 99999) . '.' . $type;
		//完整目录
		$dest = $path . '/'. $fileName;
		move_uploaded_file($v['tmp_name'], $dest);
		return $dest;
	}
}

 ?>